<?php
/**
 * 各種 セキュリティ的なエスケープ処理を行います.
 *
 * @date 2008/07/01
 * @author nagai
 * @version $Id: security.php 26 2009-11-26 06:49:55Z tzr250rsp $
 */
class security extends security_base {


  /**
   * 再帰的にHTMLの特殊文字をエスケープ処理します.
   * @param array $string_array
   * @return mixed
   */
  static public function reflexive_sanitize_html($string_array){
    if(is_array($string_array)){
      foreach($string_array as $k => $v){
        $string_array[$k] = self::reflexive_sanitize_html($v);
      }
    }else{
      $string_array = parent::sanitize_html($string_array);
    }
    return $string_array;
  }


  /**
   * 再帰的にHTMLの特殊文字をエスケープ処理した後に 改行コードを@<br /@>にします.
   * @param array $string_array
   * @return mixed
   */
  static public function reflexive_sanitize_html_nl2br($string_array){
    if(is_array($string_array)){
      foreach($string_array as $k => $v){
        $string_array[$k] = self::reflexive_sanitize_html_nl2br($v);
      }
    }else{
      $string_array = str_replace("%br%","<br />", parent::sanitize_html($string_array));
    }
    return $string_array;
  }

  /**
   * 再帰的に改行コードを@<br /@>にします.
   * @param array $string_array
   * @return mixed
   */
  static public function reflexive_nl2br($string_array){
    if(is_array($string_array)){
      foreach($string_array as $k => $v){
        $string_array[$k] = self::reflexive_nl2br($v);
      }
    }else{
      $string_array = nl2br( $string_array );
    }
    return $string_array;
  }


  /**
   * 改行コードを亡き者にします.
   */
  static public function nl2null($str){
    //return ereg_replace("[\r\n|\r\|\n]", "", $str);
    //shift_jisの 5Cが飛ぶので変更
    return ereg_replace("[".PHP_EOL."]", "", $str);
  }


  /**
   * 前後のスペース,無駄なスペースを消します.
   */
  static public function trim($str){
    $str = preg_replace("/\s{2,}/", " ", $str);
    return trim($str);
  }


  /**
   * oracle DB用のエスケープ.
   * @param string $base_string
   * @return string
   */
  static public function sanitize_db_oracle($base_string)
  {
    // XXX addslashes はバグってるので使わない!!
    // return addslashes($base_string);

    // 実装.
    $ret = "";
    // XXX 数字のみの時にint扱いされないように.
    $base_string = $base_string . "";
    $length = strlen($base_string);
    for($i = 0; $i < $length; $i ++) {
      $itr = $base_string[$i];
      switch($itr) {
        // 以下の文字は '\'でエスケープしておく
        case '\'':
          $ret .= '\'';
          break;
        default:
          break;
      }
      $ret .= $itr;
    }
    return $ret;
  }
}
//end of class

?>